package cn.iocoder.yudao.module.picturebook.service.minio;

import cn.iocoder.yudao.module.picturebook.dal.dataobject.minio.FileInfo;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;

public interface MinioService {

    /**
     * 创建存储桶
     * @param bucketName 存储桶名称
     */
    void createBucket(String bucketName);

    /**
     * 检查存储桶是否存在
     * @param bucketName 存储桶名称
     * @return 是否存在
     */
    boolean bucketExists(String bucketName);

    /**
     * 删除存储桶
     * @param bucketName 存储桶名称
     */
    void removeBucket(String bucketName);

    /**
     * 获取全部存储桶
     * @return 存储桶列表
     */
    List<String> getAllBuckets();

    /**
     * 文件上传
     * @param file 文件
     * @param bucketName 存储桶名称
     * @return 文件信息
     */
    FileInfo uploadFile(MultipartFile file, String bucketName);

    /**
     * 文件上传
     * @param fileName 文件名
     * @param contentType 文件类型
     * @param stream 文件流
     * @param bucketName 存储桶名称
     * @return 文件信息
     */
    FileInfo uploadFile(String fileName, String contentType, InputStream stream, String bucketName);

    /**
     * 下载文件
     * @param bucketName 存储桶名称
     * @param objectName 对象名称
     * @return 输入流
     */
    InputStream getObject(String bucketName, String objectName);

    /**
     * 删除文件
     * @param bucketName 存储桶名称
     * @param objectName 对象名称
     */
    void removeObject(String bucketName, String objectName);

    /**
     * 获取文件信息
     * @param bucketName 存储桶名称
     * @param objectName 对象名称
     * @return 文件信息
     */
    FileInfo getFileInfo(String bucketName, String objectName);

    /**
     * 获取文件的URL
     * @param bucketName 存储桶名称
     * @param objectName 对象名称
     * @param expires 过期时间（秒）
     * @return 文件URL
     */
    String getPresignedObjectUrl(String bucketName, String objectName, Integer expires);
}    